/*************************************************************************
*File Name: ilog.cpp
*Author: 侯广臣
*2801059691@qq.com
*Created Time: Mon 01 Feb 2021 10:55:10 AM CST
 ************************************************************************/
#include "ilog.h"
C_Log::C_Log(const char *logName, size_t logSizeMax)
{
    m_logSizeMax = logSizeMax;
    //复制日志文件名
    if(strcpy(m_logName, logName) == NULL)
    {
        #ifdef IDEBUG
            PrintStdErrorInfo("strcpy");
        #endif
        exit(-1);
    }
    //如果日志文件存在则读取日志文件大小，不存在设文件大小为0
    if(access(m_logName, F_OK) == 0)
    {
        struct stat logStat;
        if(stat(m_logName, &logStat) == -1)
        {
            #ifdef IDEBUG
                PrintStdErrorInfo("stat");
            #endif
            exit(-1);
        }
        m_logSize = logStat.st_size;
    }
    else
    {
        m_logSize = 0;
    }
    //用追加、读的模式打开日志文件
    m_logfp = fopen(m_logName, "a+");
    if(m_logfp == NULL)
    {
        #ifdef IDEBUG
            PrintStdErrorInfo("fopen");
        #endif
        exit(-1);
    }
}
//返回写入字节数，错误返回-1
bool C_Log::Write(const char *message, size_t messageLength)
{
    //如果日志文件过大，把日志文件重命名，重新建立打开新的日志文件
    if(m_logSize + messageLength >= m_logSizeMax)
    {
        //关闭当前日志文件
        fclose(m_logfp);
        //老日志文件名
        char newName[FILENAME_MAX];
        if(strcpy(newName, m_logName) == NULL )
        {
            return false;
        }
        sprintf(newName+strlen(newName), "%ld", time(0));
        //重命名老日志文件
        if(rename(m_logName, newName) == -1)
        {
            return false;
        }
        //新建日志文件
        if((m_logfp = fopen(m_logName, "a+")) == NULL)
        {
            return false;
        }
        m_logSize = 0;
    }
    //写入文件
    if(fwrite(message, 1, messageLength, m_logfp) != messageLength)
    {
        return false;
    }

    m_logSize += messageLength;
    return true;
}
